package Fisica;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import Fisica.Conexion;
import Logica.Articulo;
import Logica.Pedido;
import Logica.Recepcion;
import Logica.Proveedores;
import Logica.Operador;


public class FisicaFactura {
	/*
	 * INSERT:
		INSERT INTO fac_recepcion_capturador (fecha,proveedor_padron,nota_pedido,art_codigo,art_barras,art_descripcion,art_cantidad,operador,numero_factura,actualizado,fecha_factura,colector,comprobante_tipo,punto_venta) 
		VALUES ('2014/08/22', 4436, 1000, 14466, 7794000597600, 'CALDO KNORR', 10, 3, 3322554466, 'N', '2014/08/22', 0, 12, 00001);
		
		UPDATE: 
		UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + 6), fecha = '2014/09/27' WHERE art_codigo = 14466;
		
		*/
	
	public String INSERTARTICULO; 
	public String UPDATEARTICULO;		
	public static Connection con;	
	
	public static String getDeposito (int depo){
		
		String d1, d2;
		if (depo == 0){
			return "Minorista";
		}else return "Mayorista";	
	}
	
	public static int getDeposito (String depo){
		
		String d1, d2;
		if (depo.equals("Minorista")){
			return 0;
		}else return 1;	
	}

	
	
	public static void insertarArticuloPedido(Pedido a){
		String SELECT = "select * from fac_nota_pedido "
				+ "where n_codigo = "+a.getNotaPedido()+" and n_proveedor = "+a.getProveedorPadron()+" and n_articulo = "+a.getArtCodigo()+";";
		
		/*
		 * INSERT INTO fac_nota_pedido
		 * (n_codigo, n_fecha, n_proveedor, n_seccion, n_articulo, n_cantidad, n_precio_actual, n_precio_compra, n_operador)
		 * VALUES (1, '2014/10/05', 4436, 11, 14466, 5, 7.33, 5.33, 3);
		 * */
		String INSERTAR = "INSERT INTO fac_nota_pedido "
				+ "(n_codigo, n_fecha, n_proveedor, n_seccion, n_articulo, n_cantidad, n_precio_actual, n_precio_compra, n_operador) "
				+ "VALUES "
				+ "("+a.getNotaPedido()+", '"+a.getFecha()+"', "+a.getProveedorPadron()+", "+a.getSeccion()+", '"+a.getArtCodigo()+"', "+a.getArtCantidad()+", "+a.getpActualVenta()+", "+a.getpActualCompra()+", "+a.getOperador()+")";
		
		/*UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + 6), fecha = '2014/09/27' WHERE art_codigo = 14466;*/
//		String UPDATE = "UPDATE fac_recepcion_capturador SET art_cantidad = (art_cantidad + "+a.getCompra()+"), fecha = '"+a.getFecha()+"' "
//				+ "WHERE proveedor_padron = "+a.getPadronCodigo()+" and numero_factura = "+a.getNumeroFactura()+" "
//				+ "and art_barras = "+a.getCodBarra()+" and colector = "+a.getColector()+";";
		try {
			System.out.println("cod Interno: "+a.getArtCodigo());
			System.out.println("precio actual compra: "+a.getpActualCompra());
			System.out.println("precio actual venta: "+a.getpActualVenta());
			System.out.println("proveedor: "+a.getProveedorPadron());
			System.out.println("cantidad: "+a.getArtCantidad());
			
			con = Conexion.getConexion();
			PreparedStatement stSelect = con.prepareStatement(SELECT);	
			ResultSet rsSelect = stSelect.executeQuery();		
			
			boolean existencia =  rsSelect.next();
			PreparedStatement st; 

			if (!existencia){
				st = con.prepareStatement(INSERTAR);	
				st.executeUpdate();	
				System.out.println("nota pedido agregada: "+a.getNotaPedido());
				
				close(null, st, null);
//				st.close();
//				con.close();
			}
			close(rsSelect, stSelect, con);
//			stSelect.close();
			
		}catch(Exception e){
			System.out.println("exception al intentar insertar nota pedido: "+a.getNotaPedido());
			e.printStackTrace();
		}finally {
		    close(null, null, con); 
		}			
	}
	
	public static void borrarArticuloPedido(Pedido a){
		String SELECT = "select * from fac_nota_pedido "
				+ "where n_codigo = "+a.getNotaPedido()+" and n_proveedor = "+a.getProveedorPadron()+" and n_articulo = "+a.getArtCodigo()+";";		
		/*
		 * delete from fac_nota_pedido where n_codigo = 2
		 * */
		String DELETE = "delete from fac_nota_pedido where n_codigo = "+a.getNotaPedido()+";";
		
		try {
			con = Conexion.getConexion();
			PreparedStatement stSelect = con.prepareStatement(SELECT);	
			ResultSet rsSelect = stSelect.executeQuery();		
			
			boolean existencia =  rsSelect.next();
			rsSelect.close();
			stSelect.close();
			PreparedStatement st; 
			
			if (!existencia){
//				st = Conexion.getConexion().prepareStatement(DELETE);
				st = con.prepareStatement(DELETE);
				st.executeUpdate();	
				System.out.println("nota pedido borrada: "+a.getNotaPedido());			
				
				st.close();
			}
			
		}catch(Exception e){
			System.out.println("exception al intentar borrar nota pedido: "+a.getNotaPedido());
			e.printStackTrace();
		}finally {
		    close(null, null, con); 
		}		
	}
	
	
	public static List<Recepcion> listRecepcion(int ptoVenta, Integer nroFactura, String fecha, int deposito){
		List<Recepcion> lista = new ArrayList();	
		String sql = "select * from fac_recepcion_capturador";
		if(ptoVenta != -1 && nroFactura != -1 && fecha.length()>0){
			sql += " where colector = "+deposito+" and punto_venta = "+ptoVenta+" and numero_factura = "+nroFactura+" and fecha_factura = '"+fecha+"';";
		}else 
			if (fecha.length()>0){
				sql += " where fecha_factura >= '"+fecha+"';";
			}else sql += ";";
	
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);				
			ResultSet rs = st.executeQuery();			
			
			Recepcion a;
			while (rs.next()){
				a = new Recepcion(); 
				a.setFecha(rs.getString("fecha"));
				a.setPadronCodigo(rs.getInt("proveedor_padron"));
				a.setNotaPedido(rs.getInt("nota_pedido"));				
				a.setCodigoInterno(rs.getString("art_codigo"));
				a.setCodBarra(rs.getString("art_barras"));
				a.setDescripcion(rs.getString("art_descripcion"));
				a.setCompra(rs.getInt("art_cantidad"));
				a.setOperadorCodigo(rs.getString("operador"));
				a.setNumeroFactura(rs.getInt("numero_factura"));
				a.setPtoVenta(rs.getInt("punto_venta"));
				a.setActualzado(rs.getString("actualizado"));
				a.setFechaFactura(rs.getString("fecha_factura"));
				a.setComprobanteTipo(rs.getInt("comprobante_tipo"));
				a.setColector(rs.getInt("colector"));
								
				lista.add(a);
				}
			
			close(rs, st, con);
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 			
		return lista;		
	}
	
	
	public static List<Recepcion> groupRecepcion(boolean np){
		List<Recepcion> lista = new ArrayList();	
		String sql = "select distinct numero_factura, fecha, proveedor_padron, "
				+ "nota_pedido, punto_venta, fecha_factura, colector, "
				+ "comprobante_tipo, operador "
				+ "from fac_recepcion_capturador";
		if (np)
			sql += "where nota_pedido <> 0";
		sql +=";";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);				
			ResultSet rs = st.executeQuery();			
			
			while (rs.next()){
				Recepcion a = new Recepcion(); 
				a.setFecha(rs.getString("fecha")); //fecha de captura
				a.setPadronCodigo(rs.getInt("proveedor_padron"));
				a.setNotaPedido(rs.getInt("nota_pedido"));		//num nota pedido		
				a.setNumeroFactura(rs.getInt("numero_factura")); //num factura
				a.setPtoVenta(rs.getInt("punto_venta"));
				a.setFechaFactura(rs.getString("fecha_factura"));
				a.setColector(rs.getInt("colector"));		//deposito cargado
				a.setComprobanteTipo(rs.getInt("comprobante_tipo"));
				a.setOperadorCodigo(rs.getString("operador"));
								
				lista.add(a);
				}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}		
		return lista;		
	}
	
	
	public static List<Recepcion> groupRecepcion(String desde, String hasta, boolean np){
		List<Recepcion> lista = new ArrayList();	
		String sql = "select distinct numero_factura, fecha, proveedor_padron, "
				+ "nota_pedido, punto_venta, fecha_factura, colector, "
				+ "comprobante_tipo, operador "
				+ "from fac_recepcion_capturador "
				+ "where fecha between '"+desde+"' and '"+hasta+"'";
		
		if (np)
			sql += " and nota_pedido <> 0";
		sql +=";";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);				
			ResultSet rs = st.executeQuery();			
			Recepcion a;
			while (rs.next()){
				a = new Recepcion(); 
				a.setFecha(rs.getString("fecha")); //fecha de captura
				a.setPadronCodigo(rs.getInt("proveedor_padron"));
				a.setNotaPedido(rs.getInt("nota_pedido"));		//num nota pedido		
				a.setNumeroFactura(rs.getInt("numero_factura")); //num factura
				a.setPtoVenta(rs.getInt("punto_venta"));
				a.setFechaFactura(rs.getString("fecha_factura"));
				a.setColector(rs.getInt("colector"));		//deposito cargado
				a.setComprobanteTipo(rs.getInt("comprobante_tipo"));
				a.setOperadorCodigo(rs.getString("operador"));
								
				lista.add(a);
				}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return lista;		
	}
	
	public static Proveedores getProveedor (int padron){
		String sql= "select * from ctacte_padron where padron_catego = 3 and padron_codigo = "+padron+";";
			
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			Proveedores a = new Proveedores();
			
			if (rs.next()){
				 
				a.setPadronCodigo(rs.getInt("padron_codigo")); 				
				a.setNombre(rs.getString("padron_nombre"));				
				a.setApellido(rs.getString("padron_apelli"));					
				a.setDomicilio(rs.getString("padron_domici"));	
				a.setCuit(rs.getLong("padron_cuit11"));
				
//				st.close();
				
			}	
			close(rs, st, con);
			return a;
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Proveedores();
	}
	
	public static List<Pedido> listPedidos (int nota_pedido){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Pedido> lista = new ArrayList();	
		String sql = "select * from fac_nota_pedido where n_codigo = "+nota_pedido+";";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			while (rs.next()){
				Pedido a = new Logica.Pedido();
				a.setNotaPedido(rs.getInt("n_codigo"));
				a.setFecha(rs.getString("n_fecha"));
				a.setProveedorPadron(rs.getInt("n_proveedor"));
				a.setSeccion(rs.getInt("n_seccion"));
				a.setArtCodigo(rs.getString("n_articulo"));
				a.setArtCantidad(rs.getInt("n_cantidad"));
				a.setpActualVenta(rs.getFloat("n_precio_actual"));
				a.setpActualCompra(rs.getFloat("n_precio_compra"));
				a.setOperador(rs.getString("n_operador"));							
				
				lista.add(a);
				}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 			
		return lista;		
	}
	
	
	public static Pedido getArticuloPedido (int codigoNota, int proveedor, String string){
		String sql= "select * from fac_nota_pedido where n_codigo = "+codigoNota+" and n_proveedor = "+proveedor+" and n_articulo = "+string+";";
			
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			Pedido a = new Pedido(); 
			if (rs.next()){
				
				a.setArtCantidad(rs.getInt("n_cantidad")); 				
				a.setArtCodigo(rs.getString("n_articulo"));				
				a.setNotaPedido(rs.getInt("n_codigo"));					
				a.setOperador(rs.getString("n_operador"));	
				a.setpActualCompra(rs.getFloat("n_precio_compra"));
				a.setpActualVenta(rs.getFloat("n_precio_actual"));
				a.setProveedorPadron(rs.getInt("n_proveedor"));
				a.setSeccion(rs.getInt("n_seccion"));
				
				
			}	
			close(rs, st, con);
			return a;
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Pedido();
	}
	
	
	public static List<Proveedores> listProveedores(){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Proveedores> lista = new ArrayList();	
		String sql = "select * from ctacte_padron where padron_catego = 3 order by padron_apelli, padron_nombre;";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			while (rs.next()){
				Proveedores a = new Proveedores(); 
				a.setPadronCodigo(rs.getInt("padron_codigo")); 				
				a.setNombre(rs.getString("padron_nombre"));				
				a.setApellido(rs.getString("padron_apelli"));					
				a.setDomicilio(rs.getString("padron_domici"));				
				lista.add(a);
				}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return lista;		
	}
	

	public static List<Operador> lisOperador (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Operador> lista = new ArrayList();	
		String sql = "select * from operadores where operador_observa = 'activo' and operador_apellido <> 'ADMINISTRADOR';";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			while (rs.next()){
				Operador a = new Logica.Operador(); 
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));							
				
				lista.add(a);
				}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 			
		return lista;		
	}
	
	
	public static Operador getOperador (String operador_apellido){
		String sql = "select * from operadores where operador_apellido = '"+operador_apellido+"';";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			Operador a = new Operador();
			if (rs.next()){
//				Operador a = new Operador(); 
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));							
				
				
			}	
			close(rs, st, con);
//			st.close();
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Operador();
	}
	
	public static Operador getOperador (int id_operador){
		String sql = "select * from operadores where operador_codigo = '"+id_operador+"';";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			if (rs.next()){
				Operador a = new Operador(); 
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));							
				
				return a;
			}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Operador();
	}
	
	public static Operador getOperadorID (String id_operador){
		String sql = "select * from operadores where operador_codigo = '"+id_operador+"';";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			Operador a = new Operador();
			if (rs.next()){
//				Operador a = new Operador(); 
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));							
				
				st.close();
				
//				return a;
			}
			close(rs, st, con);
//			st.close();
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Operador();
	}
	
	
	
	public static List<Articulo> listArticulo (String cod){
		/* devuelve dos registros si el cod interno se lo pasa en los dos parametros.
		 * devuelve un registro si el codigo de barra se lo pasa en los dos parametros.
		 * select a.* 
			from fac_articulos_barras as b, fac_articulos as a 
			where (b.art_barras = '7794000597600' or a.art_codigo = 14466) and b.art_codigo = a.art_codigo;
*/
		String strCODIGO;		
		
		String sql = "select a.* "
				+ "from fac_articulos_barras as b, fac_articulos as a "
				+ "where b.art_barras = '"+cod+"' and b.art_codigo = a.art_codigo;";
		try {
			List <Articulo> list = new ArrayList<Articulo>();
			
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();
			
			Articulo a, aux;
			while (rs.next()){
				a = new Logica.Articulo(); 
				a.setCodInterno(rs.getString("art_codigo")); 	
				a.setCodBarra(rs.getString("art_barras"));
				a.setDescripcion(rs.getString("art_descri"));	
				
				boolean encontro = false;
				Iterator< Articulo> i = list.iterator();
				
				while (i.hasNext() && !encontro){
					aux = i.next();
					if(!aux.getCodInterno().equals(a.getCodInterno())){
						encontro = true;						
					}
				}				
				if (!encontro)
					list.add(a);
			}
			close(rs, st, con);
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new ArrayList<Articulo>();
	}
	
	public static List<Articulo> listArticulo (){
		String sql = "select a.art_codigo, a.art_barras, a.art_descri from fac_articulos as a;";
		try {
			List <Articulo> list = new ArrayList<Articulo>();
			
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();
			
			Articulo a, aux;
			while (rs.next()){
				a = new Logica.Articulo(); 
				a.setCodInterno(rs.getString("art_codigo")); 	
				a.setCodBarra(rs.getString("art_barras"));
				a.setDescripcion(rs.getString("art_descri"));	
				
				list.add(a);
			}	
			close(rs, st, con);
//			st.close();
			return list;
			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new ArrayList<Articulo>();
	}
	
	public static Articulo getArticulo (int codInterno){
		String sql = "select a.* from fac_articulos as a where a.art_codigo = "+codInterno+";";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();
			
			Articulo a = new Articulo(); 
			if (rs.next()){
				
				a.setCodInterno(rs.getString("art_codigo")); 	
				a.setCodBarra(rs.getString("art_barras"));
				a.setDescripcion(rs.getString("art_descri"));	
				a.setFechaUltCompra(rs.getString("art_ult_comp"));
				a.setPrecioUltCompra(rs.getString("art_prec_compra"));
				
//				return a;
			}
			close(rs, st, con);
//			st.close();
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Articulo();
	}
	
	public static float getPrecio(String cod_interno){
		String sql = "select * from fac_precios where art_codigo = "+cod_interno+" and pre_lista = 1;";
		try {
			float f = -1;
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
//			st.close();			
			
			if (rs.next()){				
				f = rs.getFloat("pre_precio");
			}
			 
			close(rs, st, con);
			return f;
			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return 0; 		
	}
	
	
	public static float getIVA (int codInterno){
		String sql = "select a.art_iva_ri, a.art_iva_rni from fac_articulos as a where a.art_codigo = "+codInterno+";";
		try {
			float f;
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			boolean existencia =  rs.next();
			rs = st.executeQuery();	
			
//			st.close();
			
			String iva21, iva105;
			if (existencia){
				rs.next();
				iva21 = rs.getString("art_iva_ri");
				iva105 = rs.getString("art_iva_rni");
				if (iva21.equals("S")){
					f = (float) 1.21;
				}else if (iva105.equals("S")){
							f = (float) 1.105;
						}else{
							f = (float) 1;
						}
			}else{
				f = -1;
			}
			
			close(rs, st, con);
			return f;
		} catch (SQLException e) {
			System.out.println("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return 0; 		
	}
	
	
	public static int contarNotasPedido(){
		String sql = "select n_codigo from fac_nota_pedido group by n_codigo;";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			int cantidad = 0;
			
			while (rs.next()){
				cantidad ++;				
			}
			
//			st.close();
			close(rs, st, con);
			return cantidad;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return 0;
	}
	
	public static List<Pedido> DetallarNotasPedido(){
		List<Pedido> lista = new ArrayList();	
		String sql = "select n_codigo, n_fecha, n_proveedor, n_operador, count (*) as n_articulos "
				+ "from fac_nota_pedido "
				+ "group by n_codigo, n_fecha, n_proveedor, n_operador;";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			int cantidad = 0;
			
			while (rs.next()){
				Pedido a = new Logica.Pedido();
				a.setNotaPedido(rs.getInt("n_codigo"));
				a.setFecha(rs.getString("n_fecha"));
				a.setProveedorPadron(rs.getInt("n_proveedor"));
				a.setArtCantidad(rs.getInt("n_articulos"));
				lista.add(a);
				}
			
			close(rs, st, con);
//			st.close();
			
			return lista;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return new ArrayList();
	}
	
	
	public static Pedido getNotasPedido(int notaPedido, int proveedorPadron, String codInterno){
		String sql = "select * from fac_nota_pedido "
				+ "where n_codigo = "+notaPedido+" and "
						+ "n_proveedor = "+proveedorPadron+" and n_articulo = "+codInterno+";";
		try {
			con = Conexion.getConexion();
			PreparedStatement st = con.prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			int cantidad = 0;
			Pedido a = new Pedido();
			
			if (rs.next()){
				a = new Logica.Pedido();
				a.setNotaPedido(rs.getInt("n_codigo"));
				a.setFecha(rs.getString("n_fecha"));
				a.setProveedorPadron(rs.getInt("n_proveedor"));
				a.setSeccion(rs.getInt("n_seccion"));
				a.setArtCodigo(rs.getString("n_articulo"));
				a.setArtCantidad(rs.getInt("n_cantidad"));
				a.setpActualVenta(rs.getFloat("n_precio_actual"));
				a.setpActualCompra(rs.getFloat("n_precio_compra"));
				a.setOperador(rs.getString("n_operador"));				
			}
			close(rs, st, con);
//			st.close();
			
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return new Pedido();
	}
	
	
	public static void close(ResultSet rs, PreparedStatement ps, Connection con)
	{
	    if (rs!=null)
	    {
	        try
	        {   rs.close();
	        }catch(SQLException e)
	        { 	e.printStackTrace();
	        }
	    }
	    if (ps != null)
	    {
	        try
	        {   ps.close();
	        } catch (SQLException e)
	        {  	e.printStackTrace();
	        }
	    }
	    if (con != null)
	    {
	        try
	        {con.close();
	        } catch (SQLException e)
	        {	e.printStackTrace();
	        }
	    }
	}
	
	
	public static void main(String[] args) {
		FisicaFactura p = new FisicaFactura();
		p.listArticulo();
	}

}
